<?php
	
	class webtruyen extends story{
		
		public $patternUrl; 
		public $startPage = 1;
		
		public function getChapters($storyUrl, $storyId){
			
			
			
			if(!isset($_SESSION['story_id'])){
			
				$_SESSION['story_id'] = $storyId;
			}
			
			if($storyId != $_SESSION['story_id']){
				
				unset($_SESSION['last_chapt']);
				unset($_SESSION['chapts']);
				$_SESSION['story_id'] = $storyId;
			}


			$model = new Model();
			
			$html = file_get_html($storyUrl);
		
			if(!$html){
				return 'het';
			}
			
			$wrap = $html->find('.gridlistchapter', 0);
			
			if(!$wrap){
				
				return 'het';
			}
			
			$wrapChild = $wrap->children(0);
			
			if(!$wrapChild){
				return 'het';
			}
			
			$content_html = $wrapChild->children();
			/*
			 * 
			 *  Ở webtruyen, nếu qua link không tồn tại vẫn xuất hiện table với class gridlistchapter và tr chứa title
			 */
			if(count($content_html) <= 1){return 'het';}
			$indexChuong = 2;
			$indexTenChuong = 3;
			
			foreach($content_html as $value){
				if($value->tag == 'tr'){
					if($value->children(0)->tag == 'th'){
						if($value->children(3)->innertext == 'Quyển'){
							$isTap = true;
						}else{
							$isTap = false;
						}
						continue;
					}
					//0 : stt
					//1 : chuong
					//2 : ten chuong
					//3 : Quyen
					/*
					 * 504 Gateway Time-out
					 */
					if($isTap == true){
						$tap = $value->children(4)->innertext;
						$patternTap = '/(Tập|Quyển)([\d\s]*)/i';
						preg_match($patternTap, $tap, $matcheTap);
						
						if($matcheTap[2]){
							$tap = trim($matcheTap[2]);
							$_SESSION['tap'] = $tap;
						}else{
							$tap = $_SESSION['tap'];
						}
						$tenTap = $matcheTap[0] . ': ';
					}
					
					
					
					$soThuTuChuong = $value->children($indexChuong)->innertext;
					$tenChuong = $value->children($indexTenChuong)->children(0)->attr['title'];
					
					if($soThuTuChuong == $tenChuong){
						$tenChuong = $tenTap . $soThuTuChuong;
					}else{
						$tenChuong = $tenTap . $soThuTuChuong . ': ' . $value->children($indexTenChuong)->children(0)->attr['title'];
					}
					
					$chuongLink = $value->children($indexTenChuong)->children(0)->attr['href'];
					

					$patternChapt = '/(Chương) ([\s\d]*)/i';
					preg_match($patternChapt, $value->children($indexChuong)->innertext, $matcheChap);

					if($matcheChap[2]){
						$matchChap = 'true';
						$chapt = (int) trim($matcheChap[2]);
						
						if(in_array($chapt, $_SESSION['chapts'])){
							$notNumeric = 'false cos it\'s numberic';
							$in_array = 'true';
							$chapt = (int) $_SESSION['last_chapt'] + 1;
							$_SESSION['chapts'][] = $chapt;
							$_SESSION['last_chapt'] = $chapt;
						}else{
							/*
							 * Nếu không tồn tại trong SESSION
							* Kiểm tra chapt có phải là số không, nếu không, gán chap cho SESSION['last_chapt']
							*/
							$in_array = 'false';
							
							if(!is_numeric($chapt) || empty($chapt) || $chapt == ''){
								$chapt = (int) $_SESSION['last_chapt'] + 1;
								$notNumeric = 'true';
							}else{
								$notNumberic = 'false';
							}
							
							$_SESSION['chapts'][] = $chapt;
						}
					}else{
						/*
						 * Trường hợp không lấy được chap và link
						 * vẫn lấy chapt bằng $_SESSION['last_chapt'] để sau này update bằng tay
						 */
						$matchChap = 'false';
						$chapt = (int) $_SESSION['last_chapt'] + 1;
						$_SESSION['chapts'][] = $chapt;
					}
					$_SESSION['last_chapt'] = $chapt;
				}
				
				$index = $tap . '_' . $chapt; // Tạo index bằng tập_chapt
				
				if($chuongLink){
				
					$links[$index] = array(
							'link' => $chuongLink,
							'title'=> $tenChuong,
							'tap'  => $tap,
							'chapt' => $chapt,
							'session_last_chapt' => $_SESSION['last_chapt'],
							'session_chapts'=>$_SESSION['chapts'],
							'matchChap'	=> $matchChap,
							'in_array'	=> $in_array,
					
					);
				}else{
					//Kiểm tra nếu có trường hợp Dom lỗi sẽ không lấy được attr
					// VD: <a title="Ví dụ "đầu tiên"" href="">
					$links[$index] = array('title'=> 'Error', 'href'=> 'Error', 'chapt' => $chapt);
				}
			}
			//unset($_SESSION['last_chapt']);
			//unset($_SESSION['chapts']);
			$html->__destruct();
			unset($ret);
			sleep(3);
			return $links;
			
		}
		
		public function getChapterContent($href){
			$pos = strpos($href, 'http://');
			if($pos !== false){
				$html = file_get_html($href);
				$content_html = $html->find('#detailcontent', 0)->innertext;
				$html->__destruct();
				
				return $content_html;
			}else{
				return false;
			}
		
		}
		
		public function autoGetChapters($story){
			$_SESSION['story_id'] = $story['id'];
			unset($_SESSION['last_chapt']);
			
			
			
			$storyUrl = $story['startPage'];
			
			$html = file_get_html($storyUrl);
			
			$content_html = $html->find('.gridlistchapter', 0)->children(0)->children();
			
			/*
			 *
			*  Ở webtruyen, nếu qua link không tồn tại vẫn xuất hiện table với class gridlistchapter và tr chứa title
			*/
			if(count($content_html) <= 1){return 'het';}
			
			$indexChuong = 2;
			$indexTenChuong = 3;
			$model = new Model();
			
			$model->select = "thutu";
			$model->where = "truyen_id = '" . $story['id'] . "'";
			$model->limit = '1';
			$model->order = "thutu DESC";
			$model->getdata('truyen_chuong');
			
			$tmpThutu = $model->fetchOne();
			$resultLastThutu = $tmpThutu['thutu'];
	
			if($resultLastThutu){
				for($ii = 1; $ii <= $resultLastThutu; $ii++){
					$_SESSION['chapts'][] = $ii;
				}
			}
			
			foreach($content_html as $key => $value){
				if($value->tag == 'tr'){
					if($value->children(0)->tag == 'th'){
						if($value->children(3)->innertext == 'Quyển'){
							$isTap = true;
						}else{
							$isTap = false;
						}
						continue;
					}
					
					if($isTap == true){
						$tap = $value->children(4)->innertext;
						$patternTap = '/(Tập|Quyển)([\d\s]*)/i';
						preg_match($patternTap, $tap, $matcheTap);
					
						if($matcheTap[2]){
							$tap = trim($matcheTap[2]);
							$_SESSION['tap'] = $tap;
						}else{
							$tap = $_SESSION['tap'];
						}
						$tenTap = $matcheTap[0] . ': ';
					}
				
					$chuongLink = $value->children($indexTenChuong)->children(0)->attr['href'];
					
					$soThuTuChuong = $value->children($indexChuong)->innertext;
					$tenChuong = $value->children($indexTenChuong)->children(0)->attr['title'];
						
					if($soThuTuChuong == $tenChuong){
						$tenChuong = $tenTap . $soThuTuChuong;
					}else{
						$tenChuong = $tenTap . $soThuTuChuong . ': ' . $value->children($indexTenChuong)->children(0)->attr['title'];
					}
					
					$model->select = "id";
					$model->where = "link = '" . $chuongLink . "' AND story_id = '" . $story['id'] . "'";
					$model->getdata('truyen_chuong_link');
					$resultLink = $model->fetchOne();
					
					// Nếu tồn tại link này trong db rồi :
					if($resultLink){
						
						// Kiểm tra chương này có phải chương lấy cuối cùng trong db không
						if($chuongLink == $story['getlink_last']){
							
							//Nếu là chương cuối cùng, kiểm tra trong DOM sau nó còn thằng nào không
							//Nếu không tức là nó là thằng cuối cùng trong page, lúc này bắt buộc trả về
							// một cái mảng với giá trị fix cứng đề ajax tiếp tục scan qua page tiếp
							
							if(!$content_html[$key + 1]){
								$links[] = array(
										'link' => 'linkLastInDOM',
										'title'=> 'linkLastInDOM',
										'tap'  => '',
										'chapt' => '',
										//'session_last_chapt' => $_SESSION['last_chapt'],
										//'session_chapts'=>$_SESSION['chapts'],
										//'matchChap'	=> $matchChap,
										//'in_array'	=> $in_array,
													
								);
								
								return $links;
							}
						}
						continue;
					}else{
						if(!$_SESSION['last_chapt']){
							$model->select = "thutu";
							$model->where = "truyen_id = '" . $story['id'] . "'";
							$model->order = "thutu DESC";
							$model->getdata('truyen_chuong');
							$resultLastChapter = $model->fetchOne();
							$chapt = $resultLastChapter['thutu'] + 1;
							$_SESSION['last_chapt'] = $chapt;
							$_SESSION['chapts'][] = $chapt;
						}else{
							$chapt = $_SESSION['last_chapt'] + 1;
							$_SESSION['last_chapt'] = $chapt;
							$_SESSION['chapts'][] = $chapt;
						}
						
						$isFound = true;
					}
			
				
					if($isTap == true){
						
						$tap = $value->children(4)->innertext;
						$patternTap = '/(Tập|Quyển)([\d\s]*)/i';
						preg_match($patternTap, $tap, $matcheTap);
						if($matcheTap[2]){
							$tap = trim($matcheTap[2]);
							$tenTap = trim($matcheTap[0]);
							$_SESSION['tap'] = $tap;
						}else{
							$tap = $_SESSION['tap'];
						}
					}
					
					
					$index = $tap . '_' . $chapt; // Tạo index bằng tập_chapt
					
					if($chuongLink){
					
						$links[$index] = array(
								'link' => $chuongLink,
								'title'=> $tenChuong,
								'tap'  => $tap,
								'chapt' => $chapt,
								'session_last_chapt' => $_SESSION['last_chapt'],
								'session_chapts'=>$_SESSION['chapts'],
								'matchChap'	=> $matchChap,
								'in_array'	=> $in_array,
									
						);
						
						
					}else{
						//Kiểm tra nếu có trường hợp Dom lỗi sẽ không lấy được attr
						// VD: <a title="Ví dụ "đầu tiên"" href="">
						if($isFound == true){
							$links[$index] = array('title'=> 'Error', 'href'=> 'Error', 'chapt'=>$chapt);
						}
					}
				}
				
				
			}
		
			$html->__destruct();
			unset($ret);
			return $links;
			//$html = file_get_html($storyUrl);
			//$content_html = $html->find('.gridlistchapter', 0)->children(0)->children();
			
		}
		
		
		public function updateStorySource($id, $link){
			$html = file_get_html($link);
			$main = $html->find('span.type', 1)->innertext;
			$patternNguon = '/(Nguồn:) (.*)/i';
			preg_match($patternNguon, $main, $matches);
			if($matches[2]){
				$model = new Model();
				$data = array('nguon'=>$matches[2]);
				$model->where = "id = '" . $id . "'";
				$model->update('truyen', $data);
			}
		}
		
		
		
		
	}